#include <iostream>
#include <cstring>

class Test
{
public:
    Test()
    {
        std::cout<<"构造函数!\n";
    }

    Test(const Test& t)
    {
        std::cout<<"深拷贝构造函数!\n";
    }

    void operator=(const Test& t)
    {
        std::cout << "赋值运算符重载深拷贝!\n";
    }

    ~Test()
    {
        std::cout<<"析构函数!\n";
    }
};

//RVD优化 : return value optimization   返回值优化 : 返回局部对象不会发生拷贝
// 返回左值 : 全引用
Test func(Test t1)  //形参不能优化
{
    //Test t1; // 将亡值
    //static Test t1; //左值
    return t1;
}

int main()
{
    // Test t();
    // Test();  //匿名对象 : 生命周期只有一行的临时对象
    //while(1);

    //将亡值 : 马上要释放的值
    //将亡值也是右值,右值的内存可以直接被夺取
    //Test t = Test();//Test t() ,写法一样

    //Test& t2 = func();

    Test t;
    Test t2 = func(t);
    return 0;
}